package com.taowan.xunbaozl.morning_speak.design_pattern.day02;

/**
 * 简单工厂模式。
 * 缺点：违反开闭原则。
 * @author diql
 * @date 2016/02/13
 *
 */
public class HumanFactory {

	public HumanFactory() {
	}

	/**
	 * Mode1。
	 * 直接通过条件判断来返回不同的子类实例。
	 * 缺点：传入条件容易搞混。
	 * @param type
	 * @return
	 */
	public Human getHuman(int type) {
		Human human = null;
		switch(type) {
			case 0:
				human = new Female();
				break;
			case 1:
				human = new Male();
				break;
			default:
				System.out.println("type is error");
				break;
		}
		return human;
	}

	/**
	 * Mode2.
	 * 直接返回。但是需要new工厂类。
	 */
	public Human getFemale() {
		return new Female();
	}

	public Human getMale() {
		return new Male();
	}

	/**
	 * mode3.
	 * 静态工厂方法。
	 * 使用静态方法创建实例，不需要new工厂类。
	 */
	public static Human getterFemale() {
		return new Female();
	}

	public static Human getterMale() {
		return new Male();
	}
}
